home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 40
/
Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso
/
Aminet
/
misc
/
emu
/
ATUtilities.lha
/
ATUtilities
/
BASIC
/
PREPALT.BAS
< prev
next >
Wrap
BASIC Source File
|
2000-09-29
|
8KB
|
328 lines
$INCLUDE "REGNAMES.INC"
%PS = 16384
%A1 = %PS + 00
%A2 = %PS + 02
%A3 = %PS + 04
%A4 = %PS + 06
%A5 = %PS + 08
%A6 = %PS + 10
%A6Low = %A6+1
stasten$=" ESC = Ende A bis F = Laufwerk X = Format Y = Quick-Format Z = Kopieren"
DIM sektoren(5),tracks(5),heads(5),fat(5),sekProCluster(5),ready(5)
COLOR 3,1
CLS
laufwerk=-1
CALL Balken(1,1,"ATUtilities Disk Transfer - Medium-Installation")
LOCATE 2,1
PRINT "Copyright (C) 1993 by Thomas Dreibholz - All rights reserved."
REG %AX,(1*256)+29
CALL INTERRUPT &H0B
offset=REG(%DI)
IF offset<>-1 THEN
CALL ZeigeLaufwerke
CALL Tasten
ELSE
CALL Balken(5,1,"ATUtilities Disk Transfer ist noch nicht aktiv!")
CALL Balken(6,1,"Laden Sie zuerst das Utility auf dem Amiga und rufen PREP.EXE erneut auf.")
CALL Balken(12,1," beliebige Taste = Ende")
BEEP
WHILE INKEY$="":WEND
END IF
COLOR 15,0
CLS
END
SUB ZeigeLaufwerke SHARED
DEF SEG = &HD400
LOCATE 4,1
FOR i=0 TO 5
POKEI offset+%A1,100
POKEI offset+%A2,i
CALL CallAndWait
PRINT CHR$(65+i);" Laufwerk";i+1;": ";
IF PEEKI(offset+%A2)=0 THEN
POKEI offset+%A1,5
CALL CallAndWait
DEF SEG = &HD400
sektoren(i)=PEEKI(offset+%A2)
tracks(i)=PEEKI(offset+%A3)
heads(i)=PEEKI(offset+%A4)
fat(i)=PEEKI(offset+%A5)
sekProCluster(i)=PEEK(offset+%A6Low)
CALL XPrint("Sektoren:",sektoren(i),6,5)
CALL XPrint("Spuren:",tracks(i),6,5)
CALL XPrint("S/L-Kpfe:",heads(i),4,5)
ready(i)=1
ELSE
ready(i)=0
PRINT "Nicht verfgbar";
END IF
PRINT ""
NEXT
END SUB
SUB Tasten SHARED
CALL Balken(11,1,stasten$)
ende=1
WHILE ende=1
i$=""
WHILE i$="": i$=INKEY$ : WEND
IF i$=CHR$(27) THEN ende=0
i$=UCASE$(i$)
IF i$>="A" AND i$<="F" THEN
CALL Bearbeite(ASC(i$)-65)
ELSEIF i$="X" THEN
CALL Formatiere(0)
ELSEIF i$="Y" THEN
CALL Formatiere(1)
ELSEIF i$="Z" THEN
CALL Kopiere
END IF
WEND
END SUB
SUB XPrint(text$,zahl,stellen,leer) SHARED
PRINT text$;
x$=STR$(zahl)
x$=STRING$(stellen-LEN(x$)," ")+x$
PRINT x$;
PRINT SPC(leer)
END SUB
SUB CallAndWait SHARED
REG %AX,(7*256)+29
CALL INTERRUPT &H0B
REG %AX,(8*256)+29
CALL INTERRUPT &H0B
END SUB
SUB Kopiere SHARED
wahl=-1
IF laufwerk<>-1 THEN
ltasten$=" ESC = Zurck A bis F = Ziellaufwerk whlen "
CALL Balken(11,1,ltasten$)
l$="Bitte geben Sie das Ziellaufwerk an: "
CALL Balken(21,1,l$+"_")
ende2=1
WHILE ende2=1
i$=""
WHILE i$="": i$=INKEY$ : WEND
IF i$=CHR$(27) THEN ende2=0 : wahl=-1
IF i$=CHR$(13) AND wahl<>-1 THEN ende2=0
i$=UCASE$(i$)
IF i$>="A" AND i$<="F" THEN
num=ASC(i$)-65
IF ready(num)=1 AND num<>laufwerk THEN
CALL Balken(21,1,l$+i$)
wahl=num
CALL Balken(11,1,ltasten$+"Eingabetaste = Kopieren")
ELSE
SOUND 1500,2
END IF
END IF
WEND
CALL EntfBalken(21,1)
END IF
IF wahl<>-1 THEN
t$=""
IF sektoren(laufwerk)<>sektoren(wahl) THEN
t$="Quelllaufwerk und Ziellaufwerk haben eine unterschiedliche Sektorenanzahl"
END IF
IF tracks(laufwerk)<>tracks(wahl) THEN
t$="Quelllaufwerk und Ziellaufwerk haben eine unterschiedliche Spurenanzahl"
END IF
IF heads(laufwerk)<>heads(wahl) THEN
t$="Quelllaufwerk und Ziellaufwerk haben unterschiedlich viele S/L-Kpfe"
END IF
IF t$="" THEN
CALL SelectDrive(laufwerk)
FOR i=0 TO tracks(laufwerk)-1
CALL Balken(21,1,"Kopiere Track"+STR$(i+1)+" von"+STR$(tracks(laufwerk))+".")
CALL Copy(i,wahl)
x=PEEKI(offset+%A2)
IF x<>0 THEN
IF x=1 THEN t$="Nicht genug Chip-Speicher fr Spur."
IF x=2 THEN t$="Fehler beim Lesen der Spur. (CMD_READ/Read())."
IF x=3 THEN t$="Fehler beim Schreiben der Spur (TD_FORMAT/Write())."
IF x=4 THEN t$="Fehler beim berprfen der Spur (CMD_READ)."
BEEP
CALL Balken(11,1," beliebige Taste = Zurck")
CALL Balken(21,1,"Fehler beim Kopieren von Spur"+STR$(i+1)+".")
CALL Balken(22,1,t$)
WHILE INKEY$="":WEND
CALL EntfBalken(21,1)
CALL EntfBalken(22,1)
GOTO Fertig
END IF
NEXT
ELSE
BEEP
CALL Balken(11,1," beliebige Taste = Zurck")
CALL Balken(21,1,t$)
WHILE INKEY$="":WEND
END IF
CALL EntfBalken(21,1)
END IF
Fertig:
CALL Balken(11,1,stasten$)
END SUB
SUB Bearbeite(num) SHARED
LOCATE 13,1
IF ready(num)=1 THEN
laufwerk=num
PRINT "Aktives Laufwerk:";num+1
fSektoren=sektoren(num)
fTracks=tracks(num)
fHeads=heads(num)
fFATSektoren=fat(num)
fSekProCluster=sekProCluster(num)
LOCATE 15,1
PRINT "Sektoren= ";fSektoren
PRINT "Spuren= ";fTracks
PRINT "S/L-Kpfe= ";fHeads
PRINT "FAT-Sektoren= ";fFATSektoren
PRINT "Sektoren/Cluster=";fSekProCluster
ELSE
SOUND 1500,2
END IF
END SUB
SUB Balken(z,s,text$) SHARED
LOCATE z,s
COLOR 3,6
PRINT text$+STRING$(80-LEN(text$)," ")
COLOR 3,1
END SUB
SUB EntfBalken(z,s) SHARED
LOCATE z,s
PRINT STRING$(80," ")
END SUB
SUB Formatiere(quick) SHARED
IF laufwerk<>-1 THEN
CALL Balken(11,1," Y = Formatierung starten N = Zurck")
CALL Balken(21,1,"Wollen Sie das Medium wirklich Formatieren ?")
CALL Balken(22,1,"Alle gesicherten Daten werden gelscht! [Y/N]")
i$=""
WHILE i$="" : i$=INKEY$ : WEND
i$=UCASE$(i$)
CALL EntfBalken(21,1)
CALL EntfBalken(22,1)
IF i$="Y" THEN
CALL Balken(21,1,"Das Medium wird formatiert. Bitte warten...")
CALL SelectDrive(laufwerk)
IF quick=0 THEN
FOR i=0 TO fTracks-1
CALL Balken(22,1,"Formatiere Spur"+STR$(i+1)+" von"+STR$(fTracks)+".")
CALL Format(i)
x=PEEKI(offset+%A2)
IF x<>0 THEN
BEEP
CALL Balken(11,1," beliebige Taste = Zurck")
CALL Balken(21,1,"Fehler beim Formatieren von Spur"+STR$(i+1)+".")
IF x=1 THEN t$="Nicht genug Chip-Speicher fr Spur."
IF x=2 THEN t$="Fehler beim Formatieren (TD_FORMAT)."
IF x=3 THEN t$="Fehler beim berprfen (CMD_READ)."
CALL Balken(22,1,t$)
WHILE INKEY$="":WEND
GOTO Okay
END IF
NEXT
END IF
REM Boot-Sektor schreiben
POKE offset+&H00,0
POKE offset+&H01,0
POKE offset+&H02,0
i$="-TD- 1.0"
FOR i=0 TO 7
POKE offset+&H03+i,ASC(MID$(i$,i+1,1))
NEXT
POKEI offset+&H0B,512
POKE offset+&H0D,fSekProCluster
POKEI offset+&H0E,1
POKE offset+&H10,1
POKEI offset+&H11,112
POKEI offset+&H13,fSektoren
POKE offset+&H15,&HF8
POKEI offset+&H16,fFATSektoren
POKEI offset+&H18,fSektoren/fTracks/fHeads
POKEI offset+&H1A,fHeads
POKEI offset+&H1C,1
FOR i=&H1E TO &HFF
POKE offset+i,0
NEXT
CALL XWrite(0,1)
REM File Allocation Table schreiben
FOR i=0 TO fFATSektoren*512
POKE offset+i,0
NEXT
POKE offset+0,&HFB
POKE offset+1,&HFF
CALL XWrite(1,fFATSektoren)
REM Hauptverzeichnis
FOR i=0 TO 2048
POKE offset+i,0
NEXT
n$="EMPTY DISK "+CHR$(8)+CHR$(0)
FOR i=0 TO 12
POKE offset+i,ASC(MID$(n$,i+1,1))
NEXT
CALL XWrite(fFATSektoren+1,4)
CALL Update
END IF
Okay:
CALL Balken(11,1,stasten$)
CALL EntfBalken(21,1)
CALL EntfBalken(22,1)
END IF
END SUB
SUB XWrite(sektor,length) SHARED
POKEI offset+%A1,1
POKEI offset+%A2,length
POKEI offset+%A3,sektor
CALL CallAndWait
END SUB
SUB Format(spur) SHARED
POKEI offset+%A1,10
POKEI offset+%A2,spur
CALL CallAndWait
END SUB
SUB Copy(spur,ziel) SHARED
POKEI offset+%A1,20
POKEI offset+%A2,spur
POKEI offset+%A3,ziel
CALL CallAndWait
END SUB
SUB Update SHARED
POKEI offset+%A1,3
CALL CallAndWait
END SUB
SUB SelectDrive(num) SHARED
POKEI offset+%A1,100
POKEI offset+%A2,num
CALL CallAndWait
END SUB